package com.yh.dao;

import com.yh.entity.Schedule;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.cursor.Cursor;

import java.util.List;

/**
 * @author yuhuan
 * @date 2022/01/13
 */
public interface ScheduleDao {
    /**
     * 查询所有的放映日程安排
     *
     * @return 返回查询的所有结果集
     */
    public List<Schedule> findScheduleAll();

    /**
     * 根据ID查找日程
     *
     * @param scheduleId 日程ID
     * @return 返回查询的日程信息
     */
    public Schedule findScheduleById(int scheduleId);

    /**
     * 根据影厅ID查找所有的日程
     *
     * @param hallId 影厅ID
     * @return 返回符合条件的日程列表
     */
    public List<Schedule> findScheduleByHallId(int hallId);

    /**
     * 根据影片ID查找日程
     *
     * @param movieId 影片的ID
     * @return 返回查询的结果集
     */
    public List<Schedule> findScheduleByMovieId(int movieId);

    /**
     * 根据影片ID和影厅ID查询日程
     *
     * @param movieId 影片的ID
     * @param hallId  影厅ID
     * @return 返回查询的所有结果集
     */
    public List<Schedule> findScheduleByMovieIdAndHallId(
            @Param("movieId") int movieId,
            @Param("hallId") int hallId);

    /**
     * 插入一条新日程到日程表（场次表）中
     *
     * @param schedule 需要插入的日程
     * @return 返回插入的总记录数
     */
    public int insterScheduleFromUpdateSchedule(Schedule schedule);

    /**
     * 根据ID修改该日程被选中的座位
     *
     * @param schedule 需要修改的日程
     * @return 返回修改的总记录数
     */
    public int updateSeatToSchedule(Schedule schedule);

    /**
     * 根据ID删除日程（仅标记日程的状态为删除；从逻辑上删除该数据）
     *
     * @param scheduleId    等待删除的日程
     * @param scheduleState 日程的状态
     * @return 删除成功的总记录数
     */
    public int removeScheduleById(int scheduleId, int scheduleState);

    /**
     * 根据ID删除日程（物理删除）
     *
     * @param scheduleId 等待删除的日程
     * @return 删除成功的总记录数
     */
    public int deleteScheduleById(int scheduleId);

    /**
     * 根据影厅ID删除所有的日程（物理删除）
     *
     * @param hallId 影厅的ID
     * @return 删除成功的总记录数
     */
    public int deleteScheduleByHallId(int hallId);
}
